package com.zxl.designpattern.creator.prototype;

import java.util.HashMap;
import java.util.Map;

/**
 * @author zxl
 * @version 1.0
 * @description 缓存类，提供原型对象的缓存服务
 * @date 2025/5/31 23:44
 */
public class WorkCardCache {

    /**
     * 缓存原型对象的容器
     */
    private static final Map<String, WorkCard> cacheMap = new HashMap<>();

    /**
     * 获取原型对象。此方法根据实际需要提供，一般不建议。这里是方便测试用
     *
     * @return
     * @throws CloneNotSupportedException
     */
    public static WorkCard getPrototype(String cacheId){
        return cacheMap.get(cacheId);
    }

    /**
     * 获取原型克隆对象
     * @param cacheId
     * @param cloneType  测试方便的代码，正式使用不应有参数。因为clone方法是确定的一种
     * @return
     * @throws CloneNotSupportedException
     */
    public static WorkCard getWorkCard(String cacheId, int cloneType) throws CloneNotSupportedException{
        WorkCard cached = cacheMap.get(cacheId);
        // 测试方便的代码，正式使用不应有此行代码。因为clone方法是确定的一种
        cached.cloneType = cloneType;
        return cached.clone();
    }

    /**
     * 加载缓存
     * 实际上这个应该加载很多原型对象放到map里。这里仅作示例只有1个原型对象
     */
    public static void loadCache() {
        Employee emp = new Employee("1001", "张三", 26);
        WorkCard workCard = new WorkCard("2001", "XX有限公司", emp);
        cacheMap.put("workCard", workCard);
    }
}
